/******************************************************
Cours:   LOG121
Session: A2013
Groupe:  04
Projet: Laboratoire #4
Étudiant(e)s: Fredy Alexander Bonilla, Renaud Vincent, Simon Castro
                            
Professeur : Francis Cardinal
Nom du fichier: FenetreImage.java
Date créé: 2013-11-22
Date dern. modif. 2013-11-26
*******************************************************
Historique des modifications
*******************************************************
2013-11-22 Version 1
2013-11-26 Ajouts des ecouteurs de la sourie
*******************************************************/  

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JPanel;

/**
 * Classe d'affichage d'une vue pouvant etre modifiee. Celle-ci est dotee
 * d'un ecouteur de souris afin de detercter les clicks et les translations.
 * 
 * @author Renaud
 */
public class TabImage extends JPanel implements Observer{

	private static final long serialVersionUID = 1L;
	
	//Attributs
	private Modele modele;
	private Controleur controleur;
	private Perspective perspective;
	private int indicePerspective;
	
	/**
	 * Constructeur de TabImage. 
	 * 
	 * @param modele
	 * @param taille
	 * @param c
	 * @param indicePerspective
	 */
	public TabImage(Modele modele, Dimension taille, Controleur c, int indicePerspective) {
		this.controleur = c;
		this.modele = modele;
		modele.creerPerspective(this, taille.width-19, taille.height-19, indicePerspective);
		this.indicePerspective = indicePerspective;
		this.perspective = this.modele.getPerspectiveAt(this.indicePerspective);
		this.addMouseListener(new PanelListener());
		setVisible(true);	
	}
	
	/**
	 * Accesseur de la perspective
	 * @return
	 */
	public Perspective getPerspective() {
		return this.perspective;
	}

	/**
	 * Methode implementee de l'interface observer
	 */
	public void update(Observable arg0, Object arg1) {
		
		this.perspective = (Perspective) arg0;	
		this.getParent().repaint();
	}
	
	/**
	 * Tracage de la perspective
	 */
	public void paintComponent(Graphics g){
		g.drawImage(this.perspective.getImage().getBufferedImage(), this.perspective.getCoinX(), this.perspective.getCoinY(),
				this.perspective.getLargeur(), this.perspective.getHauteur(),this);
	}

	/**
	 * Sous-classe dedie a ecouter la souris. Elle implemente les methodes
	 * de l'interface MouseListener
	 * @author Renaud
	 */
	private class PanelListener implements MouseListener {
		
		private int xDepart;
		private int yDepart;

		@Override
		public void mouseClicked(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseEntered(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent arg0) {
			
		}

		@Override
		public void mousePressed(MouseEvent e) {
			this.xDepart = e.getX();
			this.yDepart = e.getY();
			
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			int xFin = e.getX();
			int yFin = e.getY();
			
			int ecartX = xFin - this.xDepart;
			int ecartY = yFin - this.yDepart;
			controleur.translation(ecartX, ecartY);
		}
	}
}
